package zhu.yu.OOP_Extends;
/*
在继承的关系中，"子类就是一个父类"，子类可以被当做父类看待
例如：父类是领导，子类是PM，那么 PM 就是一个领导 关系 is-a

定义父类的格式：（一个普通的类）
public class 父类名称 {
    ...
    }
定义子类的格式：
public class 子类名称 extends 父类名称 {
    ...
    }

在父子类的继承关系当中，如果成员变量名，则创建子类对象时，访问有两种方式：
1. 直接通过子类对象访问成员变量：
    等号左边是谁，就优先用谁，没有则向上找
2. 间接通过成员方法访问成员变量：
    方法属于谁，就优先用谁，没有则向上找
 */
public class DemoExtends {
    public static void main(String[] args) {
        Pm pm = new Pm();
        pm.method();  // 调用继承的父类方法

        //
        Leader leader = new Leader(); // 父类对象
        System.out.println(leader.numFu);  // 20   只能使用父类的东西，没有任何子类内容
        Pm pm1 = new Pm();  // 子类对象
        System.out.println(pm1.numFu);  // 20
        System.out.println(pm1.numZi);  // 10

        // 直接通过子类对象访问成员变量(等号左边是谁，就优先用谁，没有则向上找),先找子类再找父类
        System.out.println(pm.num);  // 100  优先子类
//        System.out.println(pm.index);  // 到处没有，编译报错

        System.out.println("==============");
        // 子类当中有就优先用子类的，没有在往父类上找
        pm.methodZi(); // 100  // 20

        // 子类没有，就用父类的方法
        pm.methodFu();  // 200




    }
}
